package com.lmaos.basetools.sText;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * 
 * @author lmaos
 *
 * <p>作者：张星宇</p>
 * <p>时间：2017年5月24日 下午9:02:07</p>
 * <p>说明:文本工具		</p>
 *
 */
public class TextUtils {
	/**
	 * 说明：是否是空的,null或者长度为0		<br>
	 * 时间：2017年5月24日 下午8:59:14
	 *
	 * @param text
	 * @return
	 */
	public static boolean isEmpty(String text){
		return text==null||text.isEmpty();
	}
	/**
	 * 说明：是否是空白	，null或者长度为0或者是全是空格	<br>
	 * 时间：2017年5月24日 下午8:58:44
	 *
	 * @param text
	 * @return
	 */
	public static boolean isBlank(String text){
		if(isEmpty(text)){
			return true;
		}
		for (int i = 0; i < text.length(); i++) {
			char c = text.charAt(i);
			if(c!=' '&&c!='	'){
				return false;
			}
		}
		return true;
	}
	/**
	 * 说明：如果第一个参数text为空就使用后一个参数value		<br>
	 * 时间：2017年6月28日 上午10:57:19
	 *
	 * @param text
	 * @param value
	 * @return
	 */
	public static String ifIsBlankSetValue(String text,String value){
		if(isBlank(text)){
			return value;
		}
		return text;
	}
	/**
	 * 说明：通过数组获取字符串，通过splitText分割符分割数组		<br>
	 * 时间：2017年6月1日 下午11:11:08
	 *
	 * @param splitText
	 * @param objects
	 * @return
	 */
	public static String getString(String splitText,Object...objects){
		if(objects==null||objects.length==0){
			return null;
		}
		StringBuilder text = new StringBuilder(100);
		for (Object object : objects) {
			if(object !=null && !"".equals(object))
			text.append(object).append(splitText);
		}
		return text.substring(0,text.length()-splitText.length());
	}
	/** 查找关键字下标
	 * 
	 * @param text 文本
	 * @param px	关键字
	 * @param z		自定义转义,放在关键字前,如果被转义则不会被查找
	 * @return
	 */
	public static List<Integer> findIndexs(String text,String px,String z){
		List<Integer> index_1 = new ArrayList<Integer>();
		int index = 0;
		while(index<text.length()){
			index = text.indexOf(px, index);
			if(index == -1){
				break;
			}else if(index==0||text.lastIndexOf(z, index-1)!=index-z.length()){
				index_1.add(index);
			}
			index++;
		}
		return index_1;
	}
	/** 分割字符串成集合
	 * 
	 * @param text		字符串
	 * @param px_split	关键字(分割符)
	 * @param z			转义符(被转义的分割符直接填充字符串)
	 * @return
	 */
	public static List<String> split(String text,String px_split,String z){
		List<String> split_list = new ArrayList<String>();
		if(isEmpty(text)){
			return split_list;
		}
		List<Integer> indexs = findIndexs(text, px_split, z);
		if(indexs.size() == 0){
			split_list.add(text);
			return split_list;
		}
		String format = z+px_split;			// 格式
		int text_length = text.length();	// 文本长度
		int indexs_length = indexs.size();	// 下标集合长
		int z_length = z.length();			// 转义符长度
		int px_split_length = px_split.length();// 分割副长度
		
		int start_index = 0;
		for (int i=0;i<indexs_length;i++) {
			Integer index = indexs.get(i);
			if(index==0){
				
			}else{
				split_list.add(subStr(text, start_index,index, format, z_length));
				if(i==indexs_length-1&&index!=(text_length-1)){
					split_list.add(subStr(text, index+px_split_length,text_length, format, z_length));
				}
			}
			start_index = index+px_split_length;
		}
		return split_list;
	}
	
	private static String subStr(String text,int start,int end,String format,int z_length){
		text = text.substring(start, end);
		int format_index = text.indexOf(format);
		if(format_index != -1){
			text = text.substring(0,format_index)+text.substring(format_index+z_length);
		}
		return text;
	}
	/** 格式化结束符,如果存在当前结束字段则不追加，不存在则追加字符
	 * 
	 * @param text
	 * @param endText
	 * @return
	 */
	public static String formatTextEnd(String text,String endText){
		if(text.endsWith(endText)){
			return text;
		}else{
			return text+endText;
		}
	}
	public static String[] ifIsEmptySetValues(String[] text,String[] value){
		if(text == null||text.length == 0){
			return value;
		}
		return text;
	}
	public static String[] toStringArray(String str,String...strs){
		String ss[] = null;
		if(strs == null||strs.length==0){
			if(str == null){
				ss = new String[0];
			}else{
				ss = new String[]{str};
			}
		}else{
			if(str == null){
				ss = new String[strs.length];
				System.arraycopy(strs, 0, ss, 0, strs.length);
			}else{
				ss = new String[strs.length+1];
				ss[0]=str;
				System.arraycopy(strs, 0, ss, 1, strs.length);
			}
		}
		return ss;
	}
	public static String valueString(Object obj){
		if(obj == null){
			return null;
		}
		return String.valueOf(obj);
	}
	public static void main(String[] args) {
//		System.out.println(split("a--xb\\,xxx",",", "\\"));
		System.out.println(getString(",", 1,2,3,4,""));
		System.out.println(Arrays.toString(toStringArray("5")));
		System.out.println(Arrays.toString(toStringArray("6",null)));
		System.out.println(Arrays.toString(toStringArray(null)));
		System.out.println(Arrays.toString(toStringArray(null,"1","2")));
		System.out.println(Arrays.toString(toStringArray("5","3232")));
	}
}
